From 043fe4f0084a0abe2dfe095f3a23725de87590df Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Wed, 14 Jun 2023 05:32:03 -0600 Subject: [PATCH] add gnu attribute to check functions with printf like parameters. (#1129) and fix a bug revealed by the warning. --- dg-100.h | 2 +- gbser_private.h | 2 +- gtrnctr.h | 2 +- jeeps/gpsprot.cc | 10 ++-------- jeeps/gpsserial.cc | 28 +++++++++++----------------- jeeps/gpsutil.h | 8 ++++---- mtk_logger.cc | 2 +- skytraq.h | 2 +- v900.cc | 2 +- wbt-200.cc | 4 ++-- 10 files changed, 25 insertions(+), 37 deletions(-) diff --git a/dg-100.h b/dg-100.h index 7e3b5f438..12c609712 100644 --- a/dg-100.h +++ b/dg-100.h @@ -110,7 +110,7 @@ protected: const dg100_command* dg100_findcmd(int id) const; static QDateTime bintime2utc(int date, int time); static void dg100_debug(const char* hdr, int include_nl, size_t sz, unsigned char* buf); - static void dg100_log(const char* fmt, ...); + [[gnu::format(printf, 1, 2)]] static void dg100_log(const char* fmt, ...); static float bin2deg(int val); void process_gpsfile(uint8_t* data, route_head** track) const; static uint16_t dg100_checksum(const uint8_t* buf, int count); diff --git a/gbser_private.h b/gbser_private.h index e69de4db2..acc10ae70 100644 --- a/gbser_private.h +++ b/gbser_private.h @@ -24,7 +24,7 @@ #define MYMAGIC 0x91827364 #define BUFSIZE 512 -void gbser_db(int l, const char* msg, ...); +[[gnu::format(printf, 2, 3)]] void gbser_db(int l, const char* msg, ...); int gbser_fill_buffer(void* handle, unsigned want, unsigned* ms); unsigned gbser_read_buffer(void* handle, void** buf, unsigned* len); #endif // GBSER_PRIVATE_H_ diff --git a/gtrnctr.h b/gtrnctr.h index 8556f1c50..28a11d108 100644 --- a/gtrnctr.h +++ b/gtrnctr.h @@ -85,7 +85,7 @@ private: /* Member Functions */ - void gtc_write_xml(int indent, const char* fmt, ...); + [[gnu::format(printf, 3, 4)]] void gtc_write_xml(int indent, const char* fmt, ...); void gtc_write_xml(int indent, const QString& s); void gtc_lap_start(const route_head* /* unused */); static computed_trkdata gtc_new_study_lap(const route_head* rte); diff --git a/jeeps/gpsprot.cc b/jeeps/gpsprot.cc index 91332bfee..d27dd26af 100644 --- a/jeeps/gpsprot.cc +++ b/jeeps/gpsprot.cc @@ -348,7 +348,6 @@ int32 GPS_Protocol_Table_Set(US id) { int32 i; US v; - char s[GPS_ARB_LEN]; i=0; while ((v=GPS_MP[i].id)) { @@ -372,8 +371,7 @@ int32 GPS_Protocol_Table_Set(US id) } - (void) snprintf(s, sizeof(s), "INIT: No table entry for ID %d\n", id); - GPS_Error(s); + GPS_Error("INIT: No table entry for ID %d\n", id); return GPS_UNSUPPORTED; } @@ -392,11 +390,7 @@ int32 GPS_Protocol_Table_Set(US id) void GPS_Protocol_Error(US tag, US data) { - char s[GPS_ARB_LEN]; - - (void) snprintf(s, sizeof(s), - "PROTOCOL ERROR: Unknown tag/data [%c/%d]\n", tag, data); - GPS_Error(s); + GPS_Error("PROTOCOL ERROR: Unknown tag/data [%c/%d]\n", tag, data); if (gps_n_tag_unknown < GPS_TAGUNK) { gps_tag_unknown[gps_n_tag_unknown] = tag; diff --git a/jeeps/gpsserial.cc b/jeeps/gpsserial.cc index 4bbd488d5..d0f8107ab 100644 --- a/jeeps/gpsserial.cc +++ b/jeeps/gpsserial.cc @@ -70,22 +70,23 @@ typedef struct { /* * Display an error from the serial subsystem. */ -void GPS_Serial_Error(const char* mb, ...) +void GPS_Serial_Error(const char* fmt, ...) { va_list ap; char msg[200]; char* s; int b; - va_start(ap, mb); - b = vsnprintf(msg, sizeof(msg), mb, ap); + va_start(ap, fmt); + b = vsnprintf(msg, sizeof(msg), fmt, ap); s = msg + b; *s++ = ':'; *s++ = ' '; - FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, 0, - GetLastError(), 0, s, sizeof(msg) - b - 2, 0); - GPS_Error(msg); + FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, + GetLastError(), 0, s, sizeof(msg) - b - 2, nullptr); + + GPS_Error("%s", msg); // valid clang -Wformat-security warning va_end(ap); } @@ -379,24 +380,17 @@ int32 GPS_Serial_Open(gpsdevh* dh, const char* port) /* * Display an error from the serial subsystem. */ -void GPS_Serial_Error(const char* mb, ...) +void GPS_Serial_Error(const char* fmt, ...) { va_list ap; char msg[200]; - char* s; - int b; - va_start(ap, mb); - b = vsnprintf(msg, sizeof(msg), mb, ap); - s = msg + b; - *s++ = ':'; - *s++ = ' '; - *s++ = '\0'; + va_start(ap, fmt); + vsnprintf(msg, sizeof(msg), fmt, ap); // FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM, 0, // GetLastError(), 0, s, sizeof(msg) - b - 2, 0 ); - strcat(msg, strerror(errno)); - GPS_Error(msg); + GPS_Error("%s: %s", msg, strerror(errno)); va_end(ap); } diff --git a/jeeps/gpsutil.h b/jeeps/gpsutil.h index c51e5b03f..741d31a59 100644 --- a/jeeps/gpsutil.h +++ b/jeeps/gpsutil.h @@ -20,18 +20,18 @@ uint32 GPS_Util_Get_Uint(const UC* s); void GPS_Warning(const char* s); - void GPS_Error(const char* fmt, ...); - void GPS_Serial_Error(const char* hdr, ...); + [[gnu::format(printf, 1, 2)]] void GPS_Error(const char* fmt, ...); + [[gnu::format(printf, 1, 2)]] void GPS_Serial_Error(const char* fmt, ...); void GPS_Fatal(const char* s); void GPS_Enable_Error(); void GPS_Enable_Warning(); void GPS_Disable_Error(); void GPS_Disable_Warning(); - void GPS_User(const char* fmt, ...); + [[gnu::format(printf, 1, 2)]] void GPS_User(const char* fmt, ...); void GPS_Disable_User(); void GPS_Enable_User(); void GPS_Diagnose(int32 c); - void GPS_Diag(const char* fmt, ...); + [[gnu::format(printf, 1, 2)]] void GPS_Diag(const char* fmt, ...); void GPS_Enable_Diagnose(); void GPS_Disable_Diagnose(); diff --git a/mtk_logger.cc b/mtk_logger.cc index c6b7c906f..d0a15a102 100644 --- a/mtk_logger.cc +++ b/mtk_logger.cc @@ -281,7 +281,7 @@ static QVector mtk_sargs = { }, }; -static void dbg(int l, const char* msg, ...) +[[gnu::format(printf, 2, 3)]] static void dbg(int l, const char* msg, ...) { va_list ap; va_start(ap, msg); diff --git a/skytraq.h b/skytraq.h index 89c7c4bd4..7c400f32b 100644 --- a/skytraq.h +++ b/skytraq.h @@ -110,7 +110,7 @@ protected: /* Member Functions */ - static void db(int l, const char* msg, ...); + [[gnu::format(printf, 2, 3)]] static void db(int l, const char* msg, ...); void rd_drain() const; int rd_char(int* errors) const; int rd_buf(uint8_t* buf, int len) const; diff --git a/v900.cc b/v900.cc index bb16a4763..e11129041 100644 --- a/v900.cc +++ b/v900.cc @@ -140,7 +140,7 @@ struct one_line_basic_mode { static FILE* fin = nullptr; /* copied from dg-100.cpp */ -static void +[[gnu::format(printf, 1, 2)]] static void v900_log(const char* fmt, ...) { va_list ap; diff --git a/wbt-200.cc b/wbt-200.cc index 98b63dcb8..75f16aff1 100644 --- a/wbt-200.cc +++ b/wbt-200.cc @@ -145,7 +145,7 @@ struct read_state { struct buf_head data; }; -static void db(int l, const char* msg, ...) +[[gnu::format(printf, 2, 3)]] static void db(int l, const char* msg, ...) { va_list ap; va_start(ap, msg); @@ -893,7 +893,7 @@ static int wbt201_read_chunk(struct read_state* st, unsigned pos, unsigned limit } if (cs != st->data.checksum) { - db(2, "Checksums don't match. Got %02lx, expected %02\n", cs, st->data.checksum); + db(2, "Checksums don't match. Got %02lx, expected %02x\n", cs, st->data.checksum); return 0; } -- 2.30.2